﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.Data.SqlClient;

using Padelcenter.Common;

namespace Padelcenter.DataAccess
{
    #region " SELECT "
    public class Usuario_Select : DataAccessBase
    {
        public Usuario_Select()
        {
            StoredProcedureName = StoredProcedure.Name.Usuario_SELECT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;
            Usuario_Select_Prm usuario_Select_Prm = new Usuario_Select_Prm(this.Usuario);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, usuario_Select_Prm.Parameters);

            return ds;
        }

        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }
        
    }

    public class Usuario_Select_Prm
    {
        public Usuario_Select_Prm(Usuario usuario)
        {
            this.Usuario = usuario;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idUsuario"          , this.Usuario.IdUsuario ),
                new SqlParameter( "@Email"              , this.Usuario.Email ),
                new SqlParameter( "@Pwd"                , this.Usuario.Password ),
                new SqlParameter( "@ConFiltroActivo"    , this.Usuario.ConFiltroActivo),
                new SqlParameter( "@Activo"             , this.Usuario.Activo)
            };

            this.Parameters = parameters;
        }

        private SqlParameter[] _parameters;
        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    #endregion

    #region " INSERT "
    public class Usuario_Insert : DataAccessBase
    {
        public Usuario_Insert()
        { 
            StoredProcedureName = StoredProcedure.Name.Usuario_INSERT.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;
            Usuario_Insert_Prm usuario_Insert_Prm = new Usuario_Insert_Prm(this.Usuario);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, usuario_Insert_Prm.Parameters);
            
            

            return ds;
        }

        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }
    }

    public class Usuario_Insert_Prm
    {
        public Usuario_Insert_Prm(Usuario usuario)
        {
            this.Usuario = usuario;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@Email"              , this.Usuario.Email ),
                new SqlParameter( "@Pwd"                , this.Usuario.Password ),
                new SqlParameter( "@Nombre"             , this.Usuario.Nombre),
                new SqlParameter( "@Apellido"           , this.Usuario.Apellido),
                new SqlParameter( "@FechaNacimiento"    , this.Usuario.FechaNacimiento),
                new SqlParameter( "@Sexo"               , this.Usuario.Sexo),
                new SqlParameter( "@idTipoDocumento"    , this.Usuario.TipoDocumento.IdTipoDocumento),
                new SqlParameter( "@NroDocumento"       , this.Usuario.NroDocumento),
                new SqlParameter( "@Telefono"           , this.Usuario.Telefono),
                new SqlParameter( "@Movil"              , this.Usuario.Movil)
            };

            this.Parameters = parameters;
        }

        private SqlParameter[] _parameters;
        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    #endregion

    #region " UPDATE "
    public class Usuario_Update : DataAccessBase
    {
        public Usuario_Update()
        {
            StoredProcedureName = StoredProcedure.Name.Usuario_UPDATE.ToString();
        }

        public DataSet Get()
        {
            DataSet ds;
            Usuario_Update_Prm usuario_Update_Prm = new Usuario_Update_Prm(this.Usuario);
            DataBaseHelper dbhelper = new DataBaseHelper(StoredProcedureName);
            ds = dbhelper.Run(base.ConnectionString, usuario_Update_Prm.Parameters);

            return ds;
        }

        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }
    }

    public class Usuario_Update_Prm
    {
        public Usuario_Update_Prm(Usuario usuario)
        {
            this.Usuario = usuario;
            this.BuildParams();
        }

        private void BuildParams()
        {
            SqlParameter[] parameters = 
            {
                new SqlParameter( "@idUsuario"          , this.Usuario.IdUsuario),
                new SqlParameter( "@Email"              , this.Usuario.Email ),
                new SqlParameter( "@Pwd"                , this.Usuario.Password ),
                new SqlParameter( "@Nombre"             , this.Usuario.Nombre),
                new SqlParameter( "@Apellido"           , this.Usuario.Apellido),
                new SqlParameter( "@FechaNacimiento"    , this.Usuario.FechaNacimiento),
                new SqlParameter( "@Sexo"               , this.Usuario.Sexo),
                new SqlParameter( "@idTipoDocumento"    , this.Usuario.TipoDocumento.IdTipoDocumento),
                new SqlParameter( "@NroDocumento"       , this.Usuario.NroDocumento),
                new SqlParameter( "@Telefono"           , this.Usuario.Telefono),
                new SqlParameter( "@Movil"              , this.Usuario.Movil)
            };

            this.Parameters = parameters;
        }

        private SqlParameter[] _parameters;
        private Usuario _usuario;

        public Usuario Usuario
        {
            get { return _usuario; }
            set { _usuario = value; }
        }

        public SqlParameter[] Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    #endregion
}
